#include <stdio.h>
#include <stdlib.h>

#define N	10

ssize_t mygetline(char **lineptr, size_t *n);
int main(void)
{
	char *ptr = NULL;
	size_t n = 0;

	mygetline(&ptr, &n);
	printf("ptr:%s, n:%ld\n", ptr, n);

	free(ptr);
	ptr = NULL;

	return 0;
}

ssize_t mygetline(char **lineptr, size_t *n)
{
	int i;

	if (*lineptr == NULL) {
		// 没有空间
		*lineptr = malloc(N);
		*n = N;
	}
	// 从终端读一行
	i = 0;
	while (1) {
		// 对于我将要读取的字符,有空间存储
		if (i == *n - 1) {
			// 将要读的字符没有空间存储
			*lineptr = realloc(*lineptr, *n + N);
			*n = *n + N;
		}
		(*lineptr)[i] = getchar();	
		if ((*lineptr)[i] == '\n') {
			break;
		}
		i++;
	}
	(*lineptr)[i + 1] = '\0';

	return i + 1;
}



